home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 176-200 / scopedisk177 / fragit / readme < prev    next >
Text File  |  1995-03-19  |  8KB  |  231 lines

  1.  
  2.                            Fragit 2.0
  3.          A simple dynamic memory thrasher for the Amiga
  4.                      By Justin V. McCormick
  5.  
  6.  
  7.                      Notices and Copyrights
  8.  
  9.              Unless otherwise noted, all files are:
  10.   Copyright © 1989 Justin V. McCormick.  All Rights Reserved.
  11.  
  12.   This code may be freely used, modified, and distributed in any
  13. form for either commercial or personal profit or non-profit, so
  14. long as this Copyright notice remains prominently attached to
  15. the source code.  Please contact the author for special
  16. arrangements.
  17.  
  18.  
  19. Disclaimers:
  20.  
  21.   In any case, the author makes no specific performance claims
  22. for this code and assumes no responsibility to maintain or
  23. support this code.  Additionally, the author bears no liability
  24. or responsibility should the use of this code result in loss of
  25. data or sleep.
  26.  
  27.  
  28. About Fragit:
  29.  
  30.   Fragit 1.0 was a quick hack written about September of 1988.
  31. It came about due to discussion on BIX about Amiga memory
  32. fragmentation and garbage collection.
  33.  
  34.   Unfortunately, Fragit 1.0 contained a silly bug and was
  35. randomly corrupting its MinList.  Bryce Nesbitt of CBM kindly
  36. tracked this problem down in April of 1989, and I fixed the
  37. problem in V1.1 (never publicly released).
  38.  
  39.   Recently, Bryce made some good suggestions on improving the
  40. user interface to make Fragit part of a programmers debugging
  41. toolkit.  I have been busy finishing up a major commercial
  42. project, but now that I have a small amount of free programming
  43. time I decided to give Fragit a full face lift for Version 2.0.
  44. I hope you enjoy(?) using it.
  45.  
  46.         Justin V. McCormick, July 24th, 1989
  47.  
  48.   I can be reached via:
  49.  
  50.      BIX:  jmccormick
  51.  
  52.    PLINK:  jvm
  53.  
  54.    PHONE:  303-290-8429
  55.  
  56.   USMAIL:  Justin V. McCormick
  57.        8330 E. Quincy Ave.
  58.        Bldg. C #312
  59.        Denver CO, 80237
  60.  
  61.  
  62.                       Theory of Operation
  63.  
  64.   Fragit allocates random sized blocks of memory, using
  65. RangeRand() to generate psuedo-random size values that range
  66. from 16 bytes to 50000 bytes (by default).  Thus, both odd and
  67. even fragment sizes are generated, but all sizes are "legal"
  68. from an Exec viewpoint -- the allocator just rounds the sizes up
  69. to the next 8 byte size boundary.
  70.  
  71.   These random sized fragments are linked together into a
  72. dynamically allocated linked-list of Exec style MinNodes.
  73. AddHead() is used to insert new nodes (called a FragNode) at the
  74. head of the list.
  75.  
  76.   Fragit checks AvailMem() before it allocates a new random
  77. fragment; if the available memory has dropped below the limit
  78. set (which defaults to 100K), Fragit _randomly_ deallocates one
  79. of the nodes in the MinList of FragNodes.  This is done by
  80. generating a random number N such that:
  81.  
  82.     0 <= N < (number of nodes / 2)
  83.  
  84. The current list is then scanned until the Nth element is found.
  85. If Fragit hits the end of the list before finding the Nth
  86. element, it merely starts at the head of the list again.  The
  87. node is then Remove()'ed from the list and deallocated.  Of
  88. course, Fragit checks to see if the list is empty before trying
  89. to remove or deallocate a node!
  90.  
  91.   This means that if AvailMem(0L) is less than the low memory
  92. limit, Fragit starts deallocating random fragments in the list
  93. until there is enough memory to attempt allocating another
  94. fragment.  When AvailMem(0L) shows that there is more system
  95. memory than the low memory limit, it attempts to allocate
  96. and add another fragment to the head of the list.
  97.  
  98.   The result is a dynamic allocation nightmare:  thousands of
  99. memory fragments are being created and destroyed continuously.
  100. In a matter of moments, you can fragment free memory so badly
  101. that you cannot resize a window!  The idea is to put stress on
  102. the AllocMem()/FreeMem() parts of an application undergoing
  103. debugging by simulating a very busy, highly fragmented memory
  104. environment.  Additionally, you can set the Timer Speed control
  105. in Fragit to a low value and effectively "hog" the CPU.
  106.  
  107.   I recommend using Perfmon in combination with Fragit to get a
  108. a better understanding of how Fragit affects the Amiga
  109. multitasking system.
  110.  
  111.  
  112.                         Compiling Fragit
  113.  
  114.   Fragit should compile under both Lattice 5.02 and Manx 3.6a
  115. with no warnings.  Also, Fragit passes Gimpel Lint with
  116. only one warning (a spurious one).  Please use the appropriate
  117. makefile included and scan the source code file, fragit.c, for
  118. more information.
  119.  
  120.  
  121.                           Using Fragit
  122.  
  123.   Fragit can be run from the Workbench or from the CLI.  You will
  124. probably want to "RUN >NIL: Fragit" if you are launching it from
  125. the CLI; Fragit does not need a console and you can safely
  126. detach the CLI that launched Fragit.
  127.  
  128.  
  129. The Info Header:
  130.  
  131.   Fragit opens a control and display window on the Workbench.  This
  132. window contains a information header that looks like this:
  133.  
  134.     Fragments  Failures  Allocated
  135.         0         0          0
  136.  
  137.   "Fragments" is the number of nodes currently allocated by
  138. Fragit.  "Failures" is a count of the number of allocation
  139. attempts that failed.  "Allocated" is the total number of bytes
  140. used by the nodes currently allocated by Fragit.
  141.  
  142.  
  143. The Memory Stats Monitor:
  144.  
  145.   Underneath the information header is a display of the current
  146. system memory statistics, in the same format as used by "AVAIL".
  147.  
  148.  
  149. The Settings String Gadgets:
  150.  
  151.   There are four string gadgets below the memory statistics.
  152. You can click inside these and type a new setting at any time.
  153. Here is a description of what each gadget controls and the
  154. units used:
  155.  
  156. Low Mem Limit:
  157.   In BYTES, Threshold at which Fragit will stop allocations.
  158.  
  159. Timer Speed:
  160.   In MICROSECONDS, Time between allocations and info updates.
  161.  
  162. Min Frag Size:
  163.   In BYTES, Smallest fragment size that Fragit will allocate.
  164.  
  165. Max Frag Size:
  166.   In BYTES, Largest fragment size that Fragit will allocate.
  167.  
  168.  
  169. The Command Gadgets:
  170.  
  171.   At the bottom of the window are three pushbutton gadgets.
  172. You can click on these at any time to perform the following:
  173.  
  174. STOP:
  175.   Stop allocating/freeing fragments.  Note that Fragit is still
  176. updating the Memory Stats Monitor at the current Timer Speed.
  177.  
  178. START:
  179.   Begin thrashing memory at the current Timer Speed.
  180.  
  181. ALLOC:
  182.   Allocates all ram down to the current Low Mem Limit, using
  183. fragments that are Max Frag Size each.  Note that if you click
  184. on ALLOC and have a very small Max Frag Size specified, it may
  185. take quite some time to use all the ram.  You can click on the
  186. STOP gadget to abort the allocation process at any time.
  187.  
  188. PURGE:
  189.   Free the current list of nodes allocated, returning all fragments.
  190.  
  191.  
  192. Keyboard Equivalents:
  193.  
  194.   There are some simple keyboard shortcuts that can be used when
  195. the Fragit window is active:
  196.  
  197. SPACE or 's' -    STOP/START toggle
  198.      'p' -    Same as PURGE
  199.       ESCAPE -  Same as clicking on the CLOSEWINDOW gadget.
  200.  
  201.  
  202. Changing the Defaults:
  203.  
  204.   The initial defaults for Fragit can be customized by editing
  205. the Fragit.info icon file using the Workbench "Info" tool.  The
  206. following TOOL TYPES names (upper case only) are recognized:
  207.  
  208. MINMEM=<number of bytes>
  209.   Sets the Low Mem Limit.
  210.  
  211. SPEED=<number of microseconds>
  212.   Sets the Timer Speed.
  213.  
  214. MINFRAG=<number of bytes>
  215.   Sets the Min Frag Size, should be smaller than MAXFRAG, cannot
  216. be smaller than 16 bytes (the size of a FragNode).
  217.  
  218. MAXFRAG=<number of bytes>
  219.   Sets the Max Frag Size, should be larger than MINFRAG
  220.  
  221. FAST=1
  222.   Fragit will only allocate nodes from FAST_MEM.
  223.  
  224. CHIP=1
  225.   Fragit will only allocate nodes from CHIP_MEM.
  226.  
  227. MEMTYPE=<type_of_mem in decimal>
  228.   Fragit will only allocate nodes from the type of memory you specify.
  229.   For instance, MEMF_PUBLIC is defined as (1L << 0).  Thus, you could
  230.   set MEMTYPE=1 to get only MEMF_PUBLIC allocations.
  231.